package com.abc.example.service;

import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import com.github.pagehelper.PageInfo;
import com.abc.example.entity.User;


/**
 * @className	: UserManService
 * @description	: 用户对象管理服务接口类
 * @summary		: 
 * @history		: 
 * ------------------------------------------------------------------------------
 * date			version		modifier		remarks
 * ------------------------------------------------------------------------------
 * 2023/05/17	1.0.0		sheng.zheng		初版
 *
 */
public interface UserManService {
	/**
	 * @methodName		: addItem
	 * @description		: 新增一个用户对象
	 * @param request	: request对象
	 * @param item		: 用户对象
	 * @return			: 新增的用户对象key
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public Map<String,Object> addItem(HttpServletRequest request, User item);

	/**
	 * @methodName		: addItems
	 * @description		: 批量新增用户对象
	 * @param request	: request对象
	 * @param itemList	: 用户对象列表
	 * @return			: 批量记录的最后一条记录ID
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public Map<String,Object> addItems(HttpServletRequest request, List<User> itemList); 

	/**
	 * @methodName		: editItem
	 * @description		: 根据key修改一个用户对象
	 * @param request	: request对象
	 * @param params	: 用户对象相关字段字典，至少需要一个修改字段，修改字段均可选；key字段必选：
	 * 	{
	 * 		"userId": "0",	// 用户ID，必选
     * 	}
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public void editItem(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: updateItems
	 * @description		: 根据条件批量修改用户对象
	 * @param request	: request对象
	 * @param params	: 用户对象相关字段字典，至少需要一个修改字段和一个条件字段，修改字段和条件字段均可选；
	 * 	{
	 * 					  修改字段集如下：
	 * 		"orgId"			: 0,	// 组织机构ID，可选
	 * 		"userType"		: 3,	// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户，可选
	 * 		"deleteFlag"	: 0,	// 记录删除标记，0-正常、1-禁用，可选
	 * 		"operatorName"	: "",	// 操作人账号，可选
	 * 					  条件字段如下：
	 * 		"userIdList"	: [],	// 用户ID列表，list，可选
	 * 		"userName"		: "",	// 用户名，可选
	 * 		"phoneNumber"	: "",	// 手机号码，可选
	 * 	}
	 * @history			:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public void updateItems(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: deleteItem
	 * @description		: 根据key禁用/启用一个用户对象
	 * @param request	: request对象
	 * @param params	: 用户对象的key字段集
	 * 	{
	 * 		"userId": "0",	// 用户ID，必选
	 * 		"deleteFlag"	: 1,	// 记录删除标记，0-正常，1-删除，默认为1，可选
	 * 	}
	 * @history			:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public void deleteItem(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: queryItems
	 * @description		: 根据条件分页查询用户对象列表
	 * @param request	: request对象
	 * @param params	: 查询参数，形式如下：
	 * 	{
	 * 		"userId"			: "0",			// 用户ID，可选
	 * 		"userIdList"		: [],			// 用户ID列表，list，可选
	 * 		"userName"			: "",			// 用户名，可选
	 * 		"userNameLike"		: "",			// 用户名，like，可选
	 * 		"userType"			: 3,			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户，可选
	 * 		"userTypeList"		: [],			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户列表，list，可选
	 * 		"sex"				: 1,			// 性别，1-无值、2-男、3-女、4-其它，可选
	 * 		"deleteFlag"		: 0,			// 记录删除标记，0-正常、1-禁用，可选
	 * 		"phoneNumber"		: "",			// 手机号码，可选
	 * 		"phoneNumberLike"	: "",			// 手机号码，like，可选
	 * 		"realNameLike"		: "",			// 真实姓名，like，可选
	 * 		"email"				: "",			// Email，可选
	 * 		"emailLike"			: "",			// Email，like，可选
	 * 		"birthGte"			: "yyyy-MM-dd",	// 生日起始值，gte，可选
	 * 		"birthLte"			: "yyyy-MM-dd",	// 生日终止值，lte，可选
	 * 		"orgId"				: 0,			// 组织机构ID，可选
	 * 		"orgIdList"			: [],			// 组织机构ID列表，list，可选
	 * 		"openId"			: "",			// 微信小程序的openid，可选
	 * 		"woaOpenid"			: "",			// 微信公众号openid，可选
	 * 		"sortList"			: [],			// 排序选项，SortField对象列表，只支持数据表字段属性，可选
	 * 		"pagenum"			: 1,			// 当前页码，可选
	 * 		"pagesize"			: 10,			// 每页记录数，可选
	 * 	}
	 * @return			: 用户对象分页列表
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public PageInfo<User> queryItems(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: getItem
	 * @description		: 根据key获取一个用户对象
	 * @param request	: request对象
	 * @param params	: 请求参数，形式如下：
	 * 	{
	 * 		"userId": "0",	// 用户ID，必选
	 * 	}
	 * @return			: 用户对象
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public User getItem(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: getItems
	 * @description		: 根据条件查询用户对象列表
	 * @param request	: request对象
	 * @param params	: 查询参数，形式如下：
	 * 	{
	 * 		"offset"			: 0,			// limit记录偏移量，可选
	 * 		"rows"				: 20,			// limit最大记录条数，可选
	 * 		"sortList"			: [],			// 排序选项，SortField对象列表，只支持数据表字段属性，可选
	 * 		"userId"			: "0",			// 用户ID，可选
	 * 		"userIdList"		: [],			// 用户ID列表，list，可选
	 * 		"userName"			: "",			// 用户名，可选
	 * 		"userNameLike"		: "",			// 用户名，like，可选
	 * 		"userType"			: 3,			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户，可选
	 * 		"userTypeList"		: [],			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户列表，list，可选
	 * 		"sex"				: 1,			// 性别，1-无值、2-男、3-女、4-其它，可选
	 * 		"deleteFlag"		: 0,			// 记录删除标记，0-正常、1-禁用，可选
	 * 		"phoneNumber"		: "",			// 手机号码，可选
	 * 		"phoneNumberLike"	: "",			// 手机号码，like，可选
	 * 		"realNameLike"		: "",			// 真实姓名，like，可选
	 * 		"email"				: "",			// Email，可选
	 * 		"emailLike"			: "",			// Email，like，可选
	 * 		"birthGte"			: "yyyy-MM-dd",	// 生日起始值，gte，可选
	 * 		"birthLte"			: "yyyy-MM-dd",	// 生日终止值，lte，可选
	 * 		"orgId"				: 0,			// 组织机构ID，可选
	 * 		"orgIdList"			: [],			// 组织机构ID列表，list，可选
	 * 		"openId"			: "",			// 微信小程序的openid，可选
	 * 		"woaOpenid"			: "",			// 微信公众号openid，可选
	 * 	}
	 * @return			: 用户对象列表
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public List<User> getItems(HttpServletRequest request, Map<String, Object> params);
	
	/**
	 * 
	 * @methodName		: flushItem
	 * @description	    : 对象存在则修改，否则新增，用于内部调用
	 * @param request	: request对象
	 * @param item		: 用户对象，无key信息
	 * @history		    : 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks                   
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public void flushItem(HttpServletRequest request,User item); 

	/**
	 * 
	 * @methodName		: importExcelFile
	 * @description		: 导入用户对象数据Excel文件
	 * @param request	: request对象
	 * @param upfile	: 上传文件对象
	 * @param params	: 请求参数，形式如下：
	 * 	{
	 * 		"orgId"	: 0,// 组织机构ID，必选
	 * 	}
	 * @return			: 导入异常提示信息列表
	 * @history			:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public List<String> importExcelFile(HttpServletRequest request,
			MultipartFile upfile, Map<String, Object> params);

	/**
	 * 
	 * @methodName		: exportExcelFile
	 * @description	    : 根据查询条件导出用户对象数据Excel文件
	 * @param request	: request对象
	 * @param response	: response对象
	 * @param params	: 请求参数，形式如下：
	 * 	{
	 * 		"userId"			: "0",			// 用户ID，可选
	 * 		"userIdList"		: [],			// 用户ID列表，list，可选
	 * 		"userName"			: "",			// 用户名，可选
	 * 		"userNameLike"		: "",			// 用户名，like，可选
	 * 		"userType"			: 3,			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户，可选
	 * 		"userTypeList"		: [],			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户列表，list，可选
	 * 		"sex"				: 1,			// 性别，1-无值、2-男、3-女、4-其它，可选
	 * 		"deleteFlag"		: 0,			// 记录删除标记，0-正常、1-禁用，可选
	 * 		"phoneNumber"		: "",			// 手机号码，可选
	 * 		"phoneNumberLike"	: "",			// 手机号码，like，可选
	 * 		"realNameLike"		: "",			// 真实姓名，like，可选
	 * 		"email"				: "",			// Email，可选
	 * 		"emailLike"			: "",			// Email，like，可选
	 * 		"birthGte"			: "yyyy-MM-dd",	// 生日起始值，gte，可选
	 * 		"birthLte"			: "yyyy-MM-dd",	// 生日终止值，lte，可选
	 * 		"orgId"				: 0,			// 组织机构ID，可选
	 * 		"orgIdList"			: [],			// 组织机构ID列表，list，可选
	 * 		"openId"			: "",			// 微信小程序的openid，可选
	 * 		"woaOpenid"			: "",			// 微信公众号openid，可选
	 * 		"sortList"			: [],			// 排序选项，SortField对象列表，只支持数据表字段属性，可选
	 * 	}
     * @history		:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks                   
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public void exportExcelFile(HttpServletRequest request,HttpServletResponse response,
			Map<String,Object> params);

}